#ifndef _GLOBAL_DEFINES_H
#define _GLOBAL_DEFINES_H

#include <cmath>
#include <ctime>
#include <string>
#include <fstream>
#include <complex>
#include <blitz/array.h>
#include <blitz/tinyvec-et.h>
namespace emx{
	//define new types
	enum MediumType{
		Default=0,Vaccum=0,PEC
	};
	typedef double real_data;
	typedef std::complex<real_data> dComplex;
	typedef blitz::TinyVector<int,2> Int2D;
	typedef blitz::TinyVector<int,3> Int3D;
	typedef blitz::TinyVector<int,4> Int4D;
	typedef blitz::TinyVector<real_data,2> Real2D;
	typedef blitz::TinyVector<real_data,3> Real3D;
	typedef blitz::TinyVector<real_data,4> Real4D;
	typedef blitz::TinyVector<dComplex,3> Complex3D;
	typedef blitz::Array<dComplex,2> zMatrix;
	typedef blitz::Array<double,2> dMatrix;
	typedef blitz::Array<int,2> iMatrix;
	typedef blitz::Array<dComplex,1> zVector;
	typedef blitz::Array<double,1> dVector;
	typedef blitz::Array<int,1> iVector;
	//some constance
	const real_data LM = 3.33564e-9;
	const real_data SQRT3 = sqrt(3.0);
	const real_data PI = 2 * asin(1.0);
	const real_data Epsilon0 = 8.854187817e-12;
	const real_data Mu0 = PI * 4e-7;
	const real_data C = 1 / sqrt(Epsilon0 * Mu0);
	const real_data ALPHA = 1;
	const int Itmax = 10000;
	const dComplex J = dComplex(0.0,1.0);
}
#endif
